Today I contacted Microsoft support for a status update on my app, since it was on day 14 of content compliance testing when the step says it usually takes 5 days. Despite my previous post, I wasn’t angry, I was just a little annoyed and more curious than anything else. Backlogs happen, and I thought maybe there was some issue with my app on first submission that just required a bit more testing.

The response from support made me a bit upset, though. When I asked for a status update, the response was that support cannot contact testing. The recommendation was to cancel the app submission, and then resubmit and the app would go through faster this time. I had read about this as an answer in the support forums, but I figured they had to be kidding. No joke, that somehow qualifies as developer support. So I guess all of the bluster about making the app approval process transparent was just the Microsoft marketing department having some fun at Apple’s expense.

I submitted my Windows 8 app, Modern Delicious, to the store on April 1. On the 2nd, it went to the content compliance step, where it has been ever since. So much for the bit about it typically taking 5 days. This is day 12. I guess Microsoft isn’t all that serious about getting more apps in the store. If they reject the app for some reason, I’m not sure I’ll even resubmit it. Wait two more weeks for another certification cycle? I could write another app in that time.

I’ve been struggling with making semantic zoom work on a Windows 8 app that I been working on. I’m using it as an excuse to learn the MVVM pattern, but I ran into some some serious challenges making the two place nicely.

If you Google for the problem, the main post that will inevitably come back will be this post by Mikael Koskinen. It all hinges on the following code:

var collectionGroups = groupedItemsViewSource.View.CollectionGroups;
((ListViewBase)this.Zoom.ZoomedOutView).ItemsSource = collectionGroups;

While this approach will work, it doesn’t feel like a proper MVVM implementation for two reasons.

  1. You end up with code in the code behind for the view, which from my understanding violates the MVVM pattern.
  2. If you load the bound data asynchronously, which is pretty much required to get the app approved for the Windows Store, your bound collection will likely be empty when the code above runs, so when the data finishes loading, you semantic zoom source will still be empty.
  3. When you start getting into loading your views dynamically, this way gets really difficult to implement. I’m sure there’s a way to do it, but I couldn’t figure it out.

I found a better option when digging into the MVVM Light framework, specifically one of the samples they display. It seems that the Semantic Zoom control is pretty picky and needs its data source to be of type IGrouping. If you structure your data anything like me, you’re probably in the habit of binding to ObservableCollections most or all of the time, which do not implement IGrouping. So you have to implement the POCO classes/models in a way that IGrouping can understand, and then run them through a converter in your view binding. I would recommend looking at the example on the MVVM codeplex page under the section heading “The source code and the slides…” which links to a public SkyDrive folder with a zip file. If this disappears, the relevant converter code is below.

public class CvsToCollectionGroupsConverter : IValueConverter
{
	public object Convert(object value, Type targetType, object parameter, string language)
	{
		var cvs = value as ICollectionView;
		if (cvs != null)
		{
			return cvs.CollectionGroups;
		}
		return null;
	}

	public object ConvertBack(object value, Type targetType, object parameter, string language)
	{
		throw new NotImplementedException();
	}
}

Related to my post yesterday, one of the guys from Microsoft posted a white paper on the dev forums with instructions on upgrading a Metro App from the Visual Studio preview from Build to the Visual Studio 2011 Beta.

//Build to Windows 8 Consumer Preview White Paper

Original Post

It burned me. Since I was using C#, there is no upgrade path. The recommendation there is to create a new project and try to copy and paste in as much code as you can. I know what I’ll be doing this weekend.

I’ve been trying to upgrade a Windows 8 Metro App project from the Developer Preview edition of Visual Studio to the Beta of 2011 for much of this morning. Not an easy upgrade path, and I haven’t been able to find much online to help so far. Here are a few notes I’ve found that may be helpful to others.

  • The path on the MSBuild WindowsXaml assemblies has changed from v1.0 to v11.0. You can’t even get the project file to open until you edit this. It will kick up an error in the output window, the assembly I needed was Microsoft.Windows.UI.Xaml.CSharp.Targets.dll.
  • The IGroupInfo type that used to live in the Windows.UI.Xaml.Data assembly is completely gone.
  • So far as I can tell, you’re out of luck if you want to add a service reference. Any time I try to add a reference to the same WCF service that I had been using, it errors out with an extraordinarily descriptive, “Unable to add a data service. Please update project system.” I can only take that to mean a non-Metro application.

I’ll post more of these as I find them. Fun at the bleeding edge…